Technical Field
This invention relates to storage systems and, more particularly, to mapping data blocks across multiple storage devices.
Background Art
Storage systems store and retrieve data in response to input/output (I/O) requests received from the clients. Storage systems often include physical volumes, which may be actual physical storage devices, such as hard disks, solid-state devices, storage devices using another storage technology, or partitions of a storage device. Software applications, such as logical volume managers or disk array managers, provide a means of allocating space within a storage system. Storage virtualization may be utilized within a storage system to provide an abstraction of logical storage from physical storage in order to access logical storage without end-users identifying physical storage.
To support storage virtualization, a volume manager performs I/O redirection by translating incoming I/O requests using logical addresses from end-users into new requests using addresses associated with physical locations in the storage devices. Mapping tables may be utilized to perform the I/O redirection by mapping from block numbers in a logical address space to physical locations within the storage devices.
Referring now to FIG. 1, four storage devices 100A-D are shown. These storage devices may be part of a storage subsystem, and the storage subsystem may be utilized by any number of clients. Each storage device 100A-D includes a corresponding region 102A-D, respectively. Each region may be a logical address space that maps to a corresponding physical address space that may be utilized for storing data.
Turning now to FIG. 2, one prior art approach for mapping virtual block numbers to a plurality of storage devices is shown. Virtual block numbers are generated for the virtual blocks of regions 102A-D of storage devices 100A-D of FIG. 1. It is noted that “virtual block numbers” may be referred to as “block numbers” and “virtual blocks” may be referred to as “blocks” herein. In the example shown, consecutive blocks are mapped to the same region, such that blocks 0-3 are mapped to region 102A, blocks 4-7 are mapped to region 102B, blocks 8-11 are mapped to region 102C, and blocks 12-15 are mapped to region 102D. This mapping scheme assigns blocks such that consecutive blocks are stored on the same storage device. This may ensure good sequential read performance, but limits the amount of parallelism used until the I/O request size is very large. For example, a request for six blocks would likely involve only two storage devices, though it could involve a third in some cases (e.g., blocks 3-8).
Turning now to FIG. 3, another prior art approach for mapping block numbers to a plurality of storage devices is shown. In this approach, block numbers are generated such that consecutive blocks are stored on different storage devices. I/O requests that involve multiple sequential blocks are guaranteed to use different devices, increasing the amount of parallel accesses to storage. However, in some cases, there may be too much parallelism in the resultant I/O requests. For example, any request of four or more blocks would involve all four storage devices. As a result, too many separate I/O requests may be generated.
I/O system designers often want the number of storage devices used for an I/O request to increase as the size of the request increases, but not as fast as would be the case using the layout shown in FIG. 3. In view of the above, improved systems and methods for mapping block numbers to storage devices are desired.